
/**********************************************************************************\
** 文件名称: IIC.c
** 创建人员: YCG
** 创建日期: 2018-12-25
** 文档描述:
** 版本代号: V0.1
** 版本说明: 初始版本
\********************************************************************************/
#include "IIC.h"
#ifdef I2C_USE_HARDWARE
void IIC_Init(void) {
//    LL_DMA_SetPeriphAddress(DMA1, LL_DMA_CHANNEL_2, LL_I2C_DMA_GetRegAddr(I2C1, LL_I2C_DMA_REG_DATA_TRANSMIT));
//    LL_I2C_EnableDMAReq_TX(I2C1);
//    LL_I2C_SetTransferRequest(I2C1, LL_I2C_REQUEST_WRITE);
//    LL_I2C_SetSlaveAddr(I2C1, 0x78);
}

void I2C_SetStart(uint32_t Num, uint8_t* Add) {

//    LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_2);
//    LL_DMA_SetMemoryAddress(DMA1, LL_DMA_CHANNEL_2, (uint32_t)Add);        //源地址
//    LL_I2C_SetTransferSize(I2C1, Num);
//    LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_2, Num);
//    LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_2);
//    LL_I2C_GenerateStartCondition(I2C1);
}
#else
/*******************************************************************************
** 函数名称: IIC_DelayUs
** 功能描述: 延时微妙函数
** 参数说明: t: [输入]  延时的时间数
** 返回说明: None
** 创建人员: YCG
** 创建日期: 2018-12-26
********************************************************************************/
static void IIC_DelayUs(uint8_t t) {
    for(uint8_t i = 0; i < t; i++);
}

/*******************************************************************************
** 函数名称: IIC_Start
** 功能描述: IIC起始信号
** 参数说明: : [输入/出]
** 返回说明: None
** 创建人员: YCG
** 创建日期: 2018-12-25
********************************************************************************/
void IIC_Start(void)
{
    SET_SDA_HIGH;
    SET_SCL_HIGH;
    IIC_DelayUs(IIC_TIME_2);
    SET_SDA_LOW;
    IIC_DelayUs(IIC_TIME_2);
    SET_SCL_LOW;
}

/*******************************************************************************
** 函数名称: IIC_Stop
** 功能描述: IIC停止信号
** 参数说明: :
** 返回说明: None
** 创建人员: YCG
** 创建日期: 2018-12-25
********************************************************************************/
void IIC_Stop(void)
{
    SET_SCL_LOW;
    IIC_DelayUs(IIC_TIME);
    SET_SDA_LOW;
    SET_SCL_HIGH;
    IIC_DelayUs(IIC_TIME_2);
    SET_SDA_HIGH;
    IIC_DelayUs(IIC_TIME_2);
    SET_SCL_LOW;
    IIC_DelayUs(IIC_TIME);
    SET_SCL_HIGH;
}

/*******************************************************************************
** 函数名称: IIC_SendByte
** 功能描述: IIC发送一字节数据
** 参数说明: byte: [输入/出]
** 返回说明: None
** 创建人员: YCG
** 创建日期: 2018-12-25
********************************************************************************/
void IIC_SendByte(uint8_t byte)
{
    uint8_t i;
    for(i = 0; i < 8; i++)
    {
        SET_SCL_LOW;
        if(byte & 0x80)
        {
            SET_SDA_HIGH;
        }
        else
        {
            SET_SDA_LOW;
        }
        IIC_DelayUs(IIC_TIME);
        byte  <<=  1;
        SET_SCL_HIGH;
        IIC_DelayUs(IIC_TIME);
    }
    SET_SCL_LOW;
    SET_SDA_LOW;
    IIC_DelayUs(IIC_TIME);
    SET_SCL_HIGH;
    IIC_DelayUs(IIC_TIME);
}

#endif

/********************************End of File************************************/

